package datamodule;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import util.FData;
import util.FString;
import conexao.Connect;

public class NeventoDAO {

	private DBuserVO userVO;

	public NeventoDAO( DBuserVO userVO){
		this.userVO = userVO;
	}

	//Inserir Nevento
	public int inserir(NeventoVO VOnev) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmtInsert = con.prepareStatement(
				"INSERT INTO nevento(nev_Cod_Nev, nev_Descricao, igr_Cod_Igreja, nev_N_Periodos, " +
				" nev_PT_Periodo, nev_Data_Evento, reg_Item, nev_Ativo, nev_Fechado, nev_data_Fim ) "+ 
				" VALUES(?,?,?,?,?,?,?,?,?,?) ");
		pstmtInsert.setString(1, VOnev.getNev_Cod_Nev());			
		pstmtInsert.setString(2, VOnev.getNev_Descricao());
		pstmtInsert.setString(3, VOnev.getIgr_Cod_Igreja());
		pstmtInsert.setString(4, VOnev.getNev_N_Periodos());
		pstmtInsert.setString(5, VOnev.getNev_PT_Periodo());
		pstmtInsert.setDate  (6, VOnev.getNev_Data_Evento());
		pstmtInsert.setString(7, VOnev.getReg_Item());
		pstmtInsert.setString(8, VOnev.getNev_Ativo());
		pstmtInsert.setString(9, VOnev.getNev_Fechado());
		pstmtInsert.setDate  (10,VOnev.getNev_Data_Fim());
		
		int reg = pstmtInsert.executeUpdate();	
		con.close();
		return reg;
	}

	//Alterar Nevento
	public int alterar(NeventoVO VOnev) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		String virgula = "";
		StringBuffer sql = new StringBuffer(" UPDATE nevento SET ");
		if (!VOnev.getNev_Cod_Nev().equals(FString.ignorar)) {
			sql.append(virgula+" nev_Cod_Nev = '"+VOnev.getNev_Cod_Nev()+"' ");
			virgula = ",";
		}
		if (!VOnev.getNev_Descricao().equals(FString.ignorar)) {
			sql.append(virgula+" nev_Descricao = '"+VOnev.getNev_Descricao()+"' ");
			virgula = ",";
		}
		if (!VOnev.getIgr_Cod_Igreja().equals(FString.ignorar)) {
			sql.append(virgula+" igr_Cod_Igreja = '"+VOnev.getIgr_Cod_Igreja()+"' ");
			virgula = ",";
		}
		if (!VOnev.getNev_N_Periodos().equals(FString.ignorar)) {
			sql.append(virgula+" nev_N_Periodos = '"+VOnev.getNev_N_Periodos()+"' ");
			virgula = ",";
		}
		if (!VOnev.getNev_PT_Periodo().equals(FString.ignorar)) {
			sql.append(virgula+" nev_PT_Periodo = '"+VOnev.getNev_PT_Periodo()+"' ");
			virgula = ",";
		}
		if (!VOnev.getNev_Data_Evento().equals(FString.ignorar)) {
			sql.append(virgula+" nev_Data_Evento = '"+VOnev.getNev_Data_Evento()+"' ");
			virgula = ",";
		}
		if (!VOnev.getReg_Item().equals(FString.ignorar)) {
			sql.append(virgula+" reg_Item = '"+VOnev.getReg_Item()+"' ");
			virgula = ",";
		}	
		
		if (!VOnev.getNev_Ativo().equals(FString.ignorar)) {
			sql.append(virgula+" nev_Ativo = '"+VOnev.getNev_Ativo()+"' ");
			virgula = ",";
		}	
		
		if (!VOnev.getNev_Fechado().equals(FString.ignorar)) {
			sql.append(virgula+" nev_Fechado = '"+VOnev.getNev_Fechado()+"' ");
			virgula = ",";
		}	
		
		if (!VOnev.getNev_Data_Fim().equals(FString.ignorar)) {
			sql.append(virgula+" nev_Data_Fim = '"+VOnev.getNev_Data_Fim()+"' ");
			virgula = ",";
		}		
		
		sql.append(" WHERE nev_Cod_Nev = '"+VOnev.getNev_Cod_Nev()+"' ");
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0, sql.length()));
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}	
	
	// Deletar Nevento
	public int deletar(NeventoVO VOnev) throws ClassNotFoundException, SQLException {		
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmt = con.prepareStatement(
		"DELETE FROM nevento WHERE nev_Cod_Nev = ?");
		pstmt.setString(1, VOnev.getNev_Cod_Nev());
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}

	//Pesquisar Nevento
	public NeventoVO pesquisar(NeventoVO VOnev) throws ClassNotFoundException, SQLException {				
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM nevento Where nev_Cod_Nev <> '' ");
		
		if (!VOnev.getNev_Cod_Nev().equals(FString.ignorar)) {
			sql.append(" AND UPPER(nev_Cod_Nev) = '"+VOnev.getNev_Cod_Nev()+"' ");			
		}		
		if (!VOnev.getNev_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(nev_Descricao) = '"+VOnev.getNev_Descricao()+"' ");			
		}
		//System.out.println(sql);
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			VOnev = new NeventoVO();
			VOnev.setNev_Cod_Nev    ( rs.getString("nev_Cod_Nev"));
			VOnev.setNev_Descricao  ( rs.getString("nev_Descricao"));
			VOnev.setIgr_Cod_Igreja ( rs.getString("igr_Cod_Igreja"));
			VOnev.setNev_N_Periodos ( rs.getString("nev_N_Periodos"));       
			VOnev.setNev_PT_Periodo ( rs.getString("nev_PT_Periodo"));
			VOnev.setNev_Data_Evento( rs.getDate  ("nev_Data_Evento"));   
			VOnev.setReg_Item       ( rs.getString("reg_Item"));
			VOnev.setNev_Ativo      ( rs.getString("nev_Ativo"));
			VOnev.setNev_Fechado    ( rs.getString("nev_Fechado"));
			VOnev.setNev_Data_Fim   ( rs.getDate  ("nev_Data_Fim"));   
		}else {
			VOnev = null;
		}
		pstmt.close();
		rs.close();
		con.close();
		return VOnev;
	}

	public ArrayList<NeventoVO> geral(NeventoVO VOnev) throws SQLException, ClassNotFoundException {		
		ArrayList<NeventoVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM nevento Where nev_Cod_Nev <> '' ");
		if (!VOnev.getNev_Cod_Nev().equals(FString.ignorar)) {
			sql.append(" AND UPPER(nev_Cod_Nev) = ('"+VOnev.getNev_Cod_Nev()+"')");
		}
		if (!VOnev.getNev_Descricao().equals(FString.ignorar)) {
			sql.append(" AND UPPER(nev_Descricao) LIKE UPPER('"+VOnev.getNev_Descricao()+"%"+"')");
		}
		if (!VOnev.getIgr_Cod_Igreja().equals(FString.ignorar) && !VOnev.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(igr_Cod_Igreja) = ('"+VOnev.getIgr_Cod_Igreja()+"')");
		}	
		
		if (VOnev.getNev_Data_Evento()  != FData.ignorarD && !VOnev.getNev_Data_Evento_SQL().equals(FData.dataDefaultSQL())) {
			sql.append(" AND nev_Data_Evento = '"+ VOnev.getNev_Data_Evento_SQL()+"' ");
		}
		
		if (VOnev.getNev_Data_Fim() != FData.ignorarD && !VOnev.getNev_Data_Fim_SQL().equals(FData.dataDefaultSQL())) {
			sql.append(" AND nev_Data_Fim = '"+ VOnev.getNev_Data_Fim_SQL()+"' ");
		}
		
		if (!VOnev.getOrdem().equals(FString.ignorar)) {
			sql.append(" ORDER BY "+VOnev.getOrdem());
		}
		if (!VOnev.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOnev.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<NeventoVO>();
			do {
				NeventoVO nev = new NeventoVO();
				nev.setNev_Cod_Nev    ( rs.getString("nev_Cod_Nev"));
				nev.setNev_Descricao  ( rs.getString("nev_Descricao"));
				nev.setIgr_Cod_Igreja ( rs.getString("igr_Cod_Igreja"));
				nev.setNev_N_Periodos ( rs.getString("nev_N_Periodos"));
				nev.setNev_PT_Periodo ( rs.getString("nev_PT_Periodo"));
				nev.setNev_Data_Evento( rs.getDate  ("nev_Data_Evento"));
				nev.setReg_Item       ( rs.getString("reg_Item"));
				nev.setNev_Ativo      ( rs.getString("nev_Ativo"));
				nev.setNev_Fechado    ( rs.getString("nev_Fechado"));
				nev.setNev_Data_Fim   ( rs.getDate  ("nev_Data_Fim"));
				
				lista.add(nev);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}	
		
	public ResultSet listagem(NeventoVO VOnev, Connection con) throws SQLException, ClassNotFoundException {		
		StringBuffer sql = new StringBuffer("SELECT "+
		" nevento.`nev_Cod_Nev` AS nevento_nev_Cod_Nev, "+
		" nevento.`nev_Descricao` AS nevento_nev_Descricao, "+
	    " nevento.`nev_N_Periodos` AS nevento_nev_N_Periodos, "+
	    " nevento.`nev_PT_Periodo` AS nevento_nev_PT_Periodo, "+
	    " nevento.`reg_Item` AS nevento_reg_Item, "+
	    " nevento.`nev_Data_Evento` AS nevento_nev_Data_Evento, "+
	    " nevento.`igr_Cod_Igreja` AS nevento_igr_Cod_Igreja, "+
	    " nevento.`nev_Ativo` AS nevento_nev_Ativo, "+
	    " nevento.`nev_Fechado` AS nevento_nev_Fechado, "+
	    " nevento.`nev_Data_Fim` AS nevento_nev_Data_Fim, "+
	    " igrejas.`igr_Descricao` AS igrejas_igr_Descricao "+
		" FROM    `igrejas` igrejas INNER JOIN `nevento` nevento ON igrejas.`igr_Cod_Igreja` = nevento.`igr_Cod_Igreja` "+				
		" WHERE    nevento.`nev_Cod_Nev` <> '' ");		

		if (!VOnev.getNev_Cod_Nev().equals(FString.ignorar) && !VOnev.getNev_Cod_Nev().isEmpty()) {
			sql.append(" AND UPPER(nevento.`nev_Cod_Nev`) = '"+VOnev.getNev_Cod_Nev()+"'");			
		}		
		if (!VOnev.getNev_Descricao().equals(FString.ignorar) && !VOnev.getNev_Descricao().isEmpty()) {
			sql.append(" AND UPPER(nevento.`nev_Descricao`) like '"+VOnev.getNev_Descricao()+"%"+"'");			
		}

		if (!VOnev.getIgr_Cod_Igreja().equals(FString.ignorar) && !VOnev.getIgr_Cod_Igreja().isEmpty()) {
			sql.append(" AND UPPER(nevento.`igr_Cod_Igreja`) = '"+VOnev.getIgr_Cod_Igreja()+"'");
		}
		
		if (VOnev.getNev_Data_Evento()  != FData.ignorarD && !VOnev.getNev_Data_Evento_SQL().equals(FData.dataDefaultSQL())) {
			sql.append(" AND nev_Data_Evento = '"+ VOnev.getNev_Data_Evento_SQL()+"' ");
		}
		
		if (VOnev.getNev_Data_Fim() != FData.ignorarD && !VOnev.getNev_Data_Fim_SQL().equals(FData.dataDefaultSQL())) {
			sql.append(" AND nev_Data_Fim = '"+ VOnev.getNev_Data_Fim_SQL()+"' ");
		}
		

		if (!VOnev.getOrdem().equals(FString.ignorar) && !VOnev.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOnev.getOrdem());
		}
		if (!VOnev.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOnev.getLimit());
		}
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		return rs;
	}	
		
}